//package com.punch.order.service.impl;
//
//import cn.hutool.core.collection.CollUtil;
//import cn.hutool.core.util.StrUtil;
//import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
//import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
//import com.punch.common.enums.order.OrderStatusEnum;
//import com.punch.common.page.PageInfo;
//import com.punch.common.query.registration.RegistrationQueryInfo;
//import com.punch.common.tools.BasePage;
//import com.punch.common.vo.order.CourseOrderStudentVO;
//import com.punch.common.vo.order.SimpleCourseOrderVO;
//import com.punch.common.vo.order.StudentSignUpVO;
//import com.punch.common.vo.registration.RegistrationVO;
//import com.punch.order.mapper.CourseOrderMapper;
//import com.punch.order.model.OrderCourseSnapshot;
//import com.punch.order.service.CourseOrderService;
//import lombok.extern.slf4j.Slf4j;
//import org.springframework.stereotype.Service;
//
//import java.time.LocalDate;
//import java.util.ArrayList;
//import java.util.List;
//
//
///**
// * CourseOrderServiceImpl 课程订单
// *
// * @author xiaol
// * @version 1.0.0
// * @since 2020/8/5 22:55
// */
//@Service
//@Slf4j
//public class CourseOrderServiceImpl extends ServiceImpl<CourseOrderMapper, OrderCourseSnapshot> implements CourseOrderService {
//
//    /**
//     * 根据班级id查询班级报名情况
//     *
//     * @param registrationQueryInfo 班级报名情况条件
//     * @return
//     */
//    @Override
//    public PageInfo<RegistrationVO> registration(RegistrationQueryInfo registrationQueryInfo) {
//        return BasePage.queryBasePage(registrationQueryInfo, params -> this.getBaseMapper().queryRegistrationCount(params),
//                params -> {
//                    List<RegistrationVO> retList = this.getBaseMapper().queryRegistrationList(params);
//                    return retList;
//                });
//    }
//
//    /**
//     * @param registrationQueryInfo 查询条件
//     * @return 分页
//     */
//    @Override
//    public PageInfo<StudentSignUpVO> studentSignUp(RegistrationQueryInfo registrationQueryInfo) {
//        return BasePage.queryBasePage(registrationQueryInfo, params -> this.getBaseMapper().queryStudentSignUpCount(params),
//                params -> this.getBaseMapper().queryStudentSignUpList(params));
//    }
//
//    /**
//     * 获取开班课程的报名学生id列表
//     *
//     * @param courseId
//     * @param classId  班级课程id
//     * @return 学生列表
//     */
//    @Override
//    public List<CourseOrderStudentVO> getCourseStudent(Long courseId, Long classId) {
//        QueryWrapper<OrderCourseSnapshot> queryWrapper = new QueryWrapper<>();
//        queryWrapper.lambda().eq(OrderCourseSnapshot::getCourseId, courseId)
//                .eq(OrderCourseSnapshot::getCourseClassId, classId)
//                .in(OrderCourseSnapshot::getOrderStatus, OrderStatusEnum.TO_OPEN_CLASS.getCode(), OrderStatusEnum.HAVE_OPEN_CLASS.getCode());
//        List<OrderCourseSnapshot> list = list(queryWrapper);
//        List<CourseOrderStudentVO> retList = new ArrayList<>();
//        list.forEach(courseOrder -> {
//            CourseOrderStudentVO courseOrderStudentVO = new CourseOrderStudentVO();
//            courseOrderStudentVO.setStudentName(courseOrder.getStudentName());
//            courseOrderStudentVO.setStudentSex(courseOrder.getStudentSex());
//            courseOrderStudentVO.setStudentGrade(courseOrder.getStudentGrade());
//            courseOrderStudentVO.setStudentClass(courseOrder.getStudentClass());
//            courseOrderStudentVO.setGuardianMobile(courseOrder.getGuardianMobile());
//            retList.add(courseOrderStudentVO);
//        });
//        return retList;
//    }
//
//    /**
//     * 统计开班课程的报名学生
//     *
//     * @param classId 班级课程id
//     * @return 学生列表
//     */
//    @Override
//    public int getCourseStudentCount(Long courseId, Long classId) {
//        QueryWrapper<OrderCourseSnapshot> queryWrapper = new QueryWrapper<>();
//        queryWrapper.lambda().eq(OrderCourseSnapshot::getCourseId, courseId)
//                .eq(OrderCourseSnapshot::getCourseClassId, classId)
//                .in(OrderCourseSnapshot::getOrderStatus, OrderStatusEnum.TO_OPEN_CLASS.getCode(), OrderStatusEnum.HAVE_OPEN_CLASS.getCode());
//        return count(queryWrapper);
//    }
//
//    /**
//     * 更新该课程下开班的课程订单的已完成课时数
//     *
//     * @param courseId 课程id
//     * @param classId  班级id
//     * @return boolean
//     */
//    @Override
//    public Boolean updateClassFinishCount(Long courseId, Long classId) {
//        return getBaseMapper().updateClassFinishCount(courseId, classId);
//    }
//
//    /**
//     * 获取学生已报名的订单
//     *
//     * @param studentId 学生id
//     * @return list
//     */
//    @Override
//    public List<Long> getStudentCourseOrderId(Long studentId) {
//        List<Long> retList = new ArrayList<>();
//        QueryWrapper<OrderCourseSnapshot> queryWrapper = new QueryWrapper<>();
//        queryWrapper.lambda().eq(OrderCourseSnapshot::getStudentId, studentId).eq(OrderCourseSnapshot::getOrderStatus, OrderStatusEnum.TO_OPEN_CLASS.getCode());
//        list(queryWrapper).forEach(courseOrder -> {
//            retList.add(courseOrder.getCourseClassId());
//        });
//        return retList;
//    }
//
//    /**
//     * 学生是否报名该课程
//     *
//     * @param classId   课程班级id
//     * @param studentId 学生id
//     * @return boolean
//     */
//    @Override
//    public boolean isSignUp(Long classId, Long studentId) {
//        QueryWrapper<OrderCourseSnapshot> queryWrapper = new QueryWrapper<>();
//        queryWrapper.lambda().eq(OrderCourseSnapshot::getCourseClassId, classId).eq(OrderCourseSnapshot::getStudentId, studentId).eq(OrderCourseSnapshot::getOrderStatus, OrderStatusEnum.TO_OPEN_CLASS.getCode());
//        OrderCourseSnapshot orderCourseSnapshot = getOne(queryWrapper);
//        if (orderCourseSnapshot != null) {
//            return true;
//        }
//        return false;
//    }
//
//    /**
//     * 某学校某年级下的某个班级报名某个课程情况
//     *
//     * @param schoolName 学校名称
//     * @param gradeYear  年级
//     * @param gradeClass 班级
//     * @param className  报班名称
//     * @return SimpleCourseOrderVO
//     */
//    @Override
//    public List<SimpleCourseOrderVO> getSimpleCourseClassOrder(String schoolName, String gradeYear, String gradeClass, String className) {
//        QueryWrapper<OrderCourseSnapshot> courseOrderQueryWrapper = new QueryWrapper<>();
//        courseOrderQueryWrapper.lambda().like(OrderCourseSnapshot::getSchoolName, schoolName).eq(OrderCourseSnapshot::getStudentGrade, gradeYear).eq(OrderCourseSnapshot::getStudentClass, gradeClass);
//        if (StrUtil.isNotEmpty(className)) {
//            courseOrderQueryWrapper.lambda().like(OrderCourseSnapshot::getCourseClassName, className);
//        }
//        List<OrderCourseSnapshot> list = list(courseOrderQueryWrapper);
//        List<SimpleCourseOrderVO> stuOrderList = new ArrayList<>();
//        list.forEach(courseOrder -> {
//            SimpleCourseOrderVO simpleCourseOrderVO = new SimpleCourseOrderVO();
//            simpleCourseOrderVO.setStudentId(courseOrder.getStudentId());
//            simpleCourseOrderVO.setCourseName(courseOrder.getCourseName());
//            simpleCourseOrderVO.setCourseClassName(courseOrder.getCourseClassName());
//            stuOrderList.add(simpleCourseOrderVO);
//        });
//        return stuOrderList;
//
//    }
//
//    /**
//     * 运营修改开班时间
//     *
//     * @param classId  课程id
//     * @param openDate 开班时间
//     */
//    @Override
//    public void feignUpdateCourseOrderOpenDate(Long classId, LocalDate openDate) {
//        QueryWrapper<OrderCourseSnapshot> queryWrapper = new QueryWrapper<>();
//        queryWrapper.lambda().eq(OrderCourseSnapshot::getCourseClassId, classId);
//        List<OrderCourseSnapshot> list = list(queryWrapper);
//        if (CollUtil.isEmpty(list)) {
//            return;
//        }
//        OrderCourseSnapshot orderCourseSnapshot = list.get(0);
//        log.info("班id:[{}]的开班时间由[{}]修改成[{}]", classId, orderCourseSnapshot.getClassOpenDate(), openDate);
//        getBaseMapper().updateOpenDate(classId, openDate);
//    }
//
//    /**
//     * 运营修改教师
//     *
//     * @param classId     课程id
//     * @param teacherName 教师名称
//     */
//    @Override
//    public void feignUpdateCourseOrderTeacher(Long classId, String teacherName) {
//        QueryWrapper<OrderCourseSnapshot> queryWrapper = new QueryWrapper<>();
//        queryWrapper.lambda().eq(OrderCourseSnapshot::getCourseClassId, classId);
//        List<OrderCourseSnapshot> list = list(queryWrapper);
//        if (CollUtil.isEmpty(list)) {
//            return;
//        }
//        OrderCourseSnapshot orderCourseSnapshot = list.get(0);
//        log.info("班id:[{}]的教师时间由[{}]修改成[{}]", classId, orderCourseSnapshot.getTeacherName(), teacherName);
//        getBaseMapper().updateTeacher(classId, teacherName);
//    }
//
//    /**
//     * 运营修改教室
//     *
//     * @param classId       课程id
//     * @param classRoomName 教室
//     */
//    @Override
//    public void feignUpdateCourseOrderClassRoom(Long classId, String classRoomName) {
//        QueryWrapper<OrderCourseSnapshot> queryWrapper = new QueryWrapper<>();
//        queryWrapper.lambda().eq(OrderCourseSnapshot::getCourseClassId, classId);
//        List<OrderCourseSnapshot> list = list(queryWrapper);
//        if (CollUtil.isEmpty(list)) {
//            return;
//        }
//        OrderCourseSnapshot orderCourseSnapshot = list.get(0);
//        log.info("班id:[{}]的教室时间由[{}]修改成[{}]", classId, orderCourseSnapshot.getClassRoomName(), classRoomName);
//        getBaseMapper().updateClassRoom(classId, classRoomName);
//    }
//}
